草庐IT

Android onClick 阻塞 onFling

全部标签

tcp - 给定 TCP,当 IO 是非阻塞时,State Design Pattern 是否用处不大?

在我的TCP应用程序中,只要IO处于阻塞状态,状态设计模式似乎就很有用。我的SwingWorker的doInBackground()可以通过引用一个对象循环访问TCP连接中的读取、写入和接受状态。请参阅维基百科讨论页上的示例:http://en.wikipedia.org/wiki/Talk%3AState_pattern.然而,当我将服务器重构为非阻塞IO时,它似乎不再有用了。Select()返回一组准备好进行IO的channel,这些channel通过引用一系列if语句中的SelectionKey状态来处理。任何人都可以根据经验或理解来确认当IO是非阻塞时状态设计模式是否仍然有用?

networking - 为什么 UDP 广播以比 TCP 低得多的速度阻塞路由器?

想法:我们有一个生成大约200-300Mb/s数据的成像系统,这些数据目前通过以太网电缆传输到计算机,计算机解压缩它们并显示实时图像。我们正试图通过让系统通过以太网电缆将数据包传递到路由器,然后路由器将udp数据包广播到计算机(或最终-多台计算机),从而使系统在LAN上无线化。在最高层看起来有点像这样:之前:成像设备->cat-5->计算机(在达到所需的300Mb/s时工作正常)之后:成像设备->cat-5->路由器->802.11ac无线->电脑(超过5Mb/s的巨大(50%+)数据丢失)-电脑:surfacepro3-路由器:BuffaloAirStationAC1750DD‑WR

c++ - 如何使用 streamsocket 作为 poco 库中的非阻塞 tcp 客户端?

poco库为tcp服务器提供了一个reactor框架。并且有一些示例演示了如何使用它。但我找不到任何streamsocket的例子。我只想在非阻塞模式的tcp客户端使用,请问如何使用?谢谢。 最佳答案 对于C++中的网络I/O,建议使用ASIO因为它正在准备包含在C++语言标准中。 关于c++-如何使用streamsocket作为poco库中的非阻塞tcp客户端?,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

java - Java InputStream 到 OutputStream 的非阻塞回显

它已经建立了以下代码,看起来运行良好:voidpipe(InputStream,OutputStreamos){try{try{byte[]buf=newbyte[1024*16];intlen,available=is.available();while((len=is.read(buf,0,available>0?available:1))!=-1){os.write(buf,0,len);available=is.available();if(available以前,我发现如果我调用is.read(buf),那么,即使数据可用,它也会阻塞等待更多数据,直到缓冲区已满。这是一个用于

c - 非阻塞 tcp 套接字如何在发送失败的数据包上通知应用程序。

我正在为linux系统开发一个非阻塞的Ctcp套接字。我读过在非阻塞模式下,如果没有错误,“发送”命令将立即返回“发送的字节数”。我猜这个返回值实际上并不意味着这些数据已经传送到目的地,而是数据已经传递到内核内存以供其进一步处理和发送。如果是这样的话,我的应用程序如何知道内核真正向另一端发送了哪个数据包,假设网络连接有一些问题并且内核决定在一段时间内重试几次后放弃几分钟后?我问是因为我希望我的应用程序稍后再次重新发送那些失败的数据包。 最佳答案 Ifthatisthecase,howwouldmyapplicationknowwhi

c++ - 套接字发送调用被阻塞了这么久

我每10秒在套接字上发送2个字节的应用程序数据(阻塞),但发送调用在下面的最后一个实例中被阻塞了超过40秒。2012-06-1312:02:46.653417|信息|发送前2012-06-1312:02:46.653457|INFO|发送后(2)2012-06-1312:02:57.566898|信息|发送前2012-06-1312:02:57.566962|INFO|发送后(2)2012-06-1312:03:08.234060|INFO|发送前2012-06-1312:03:08.234101|INFO|发送后(2)**2012-06-1312:03:19.010743|INFO|

c - 从非阻塞 c 套接字读取大数据

如何在C中读取非阻塞TCP套接字,但读取大块数据?在我的实现中,结果总是负数并且errno等同于“资源暂时不可用”,除非我们的数据大于“大小”。result=read(fd,buffer,size);当我们在C中读取非阻塞TCP套接字时,它不会返回>=0,除非它已经收到我们请求的完整数据,这是真的吗? 最佳答案 不是真的,它会返回当没有数据时,它会设置errno至EAGAIN“资源暂时不可用”或类似的错误值。read()函数将读取尽可能多的数据并返回,该值可能是负值表示错误(*或EAGAINResourceTemporarilyUn

tcp - 在 Windows 下的非阻塞 TCP 套接字上使用 SO_SNDBUF 的奇怪行为

我试图降低我的非阻塞TCP套接字上的发送缓冲区大小,以便我可以正确显示上传进度条,但我看到了一些奇怪的行为。我正在创建一个非阻塞的TCP套接字,将SO_SNDBUF设置为1024,验证设置是否正确,然后连接(在调用连接之前和之后都试过了,没有区别)。问题是,当我的应用程序实际出现并调用发送(发送大约2MB)而不是返回发送了大约1024个字节时,发送调用显然接受了所有数据并返回了2MB的发送值(正是我通过了)。一切都正常运行(这是一个HTTPPUT,我得到了一个响应,等等)但是我最终在我的进度条中显示的是上传在100%大约30秒然后响应进来。我已经确认,如果我在收到响应之前停止,则上传不

c++ - 简单套接字非阻塞 I/O

我正在尝试在服务器和客户端之间实现非阻塞I/O。两者连接后,我尝试使用fork来处理IO,但是服务器端在尝试读取“传输端点未连接”时出错,并且发生了两次(我猜是因为fork?).服务器代码//includestakenout#definePORT"4950"#defineSTDIN0structsockaddrname;voidset_nonblock(intsocket){intflags;flags=fcntl(socket,F_GETFL,0);assert(flags!=-1);fcntl(socket,F_SETFL,flags|O_NONBLOCK);}//getsocka

sockets - TCP 阻塞套接字 - 在不同数据包中接收少量字节的可能性

如果服务器发送4个字节send(sock,buffer1,4,0);客户端正好等待4个字节recv(sock,buffer2,4,0);buffer2有没有可能写入不到4个字节?之前没有进行其他send或recv。如果不可能,send可以做的缓冲区的最大大小是多少,以便recv可以在一次调用中获得相同的缓冲区大小。 最佳答案 没有所谓的“消息”,除了你自己界定的。重复:没有消息这样的东西。TCP不发送消息,它发送八位字节流。您需要在循环中发送,以防未确认数据积压并且send没有使用您传入的整个缓冲区。您需要在循环中接收,以防发送堆栈